home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / radiusclient.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-06-29  |  11.8 KB  |  437 lines

  1. /*
  2.  * $Id: radiusclient.h,v 1.9 1999/01/06 23:53:04 lf Exp $
  3.  *
  4.  * Copyright (C) 1995,1996,1997,1998 Lars Fenneberg
  5.  *
  6.  * Copyright 1992 Livingston Enterprises, Inc.
  7.  *
  8.  * Copyright 1992,1993, 1994,1995 The Regents of the University of Michigan 
  9.  * and Merit Network, Inc. All Rights Reserved
  10.  *
  11.  * See the file COPYRIGHT for the respective terms and conditions. 
  12.  * If the file is missing contact me at lf@elemental.net 
  13.  * and I'll send you a copy.
  14.  *
  15.  */
  16.  
  17. #ifndef RADIUSCLIENT_H
  18. #define RADIUSCLIENT_H
  19.  
  20. #include    <sys/types.h>
  21. #include    <stdio.h>
  22. #include    <time.h>
  23.  
  24. #undef __BEGIN_DECLS
  25. #undef __END_DECLS
  26. #ifdef __cplusplus
  27. # define __BEGIN_DECLS extern "C" {
  28. # define __END_DECLS }
  29. #else
  30. # define __BEGIN_DECLS /* empty */
  31. # define __END_DECLS /* empty */
  32. #endif
  33.  
  34. #undef __P
  35. #if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(WIN32) || defined(__cplusplus)
  36. # define __P(protos) protos
  37. #else
  38. # define __P(protos) ()
  39. #endif
  40.  
  41. typedef unsigned long UINT4;
  42. typedef long           INT4;
  43.  
  44. #define AUTH_VECTOR_LEN        16
  45. #define AUTH_PASS_LEN        (3 * 16) /* multiple of 16 */
  46. #define AUTH_ID_LEN        64
  47. #define AUTH_STRING_LEN        128     /* maximum of 253 */
  48.  
  49. #define    BUFFER_LEN        8192
  50.  
  51. #define NAME_LENGTH        32
  52. #define    GETSTR_LENGTH        128    /* must be bigger than AUTH_PASS_LEN */
  53.  
  54. /* codes for radius_buildreq, radius_getport, etc. */
  55. #define AUTH            0
  56. #define ACCT            1
  57.  
  58. /* defines for config.c */
  59.  
  60. #define SERVER_MAX 8
  61.  
  62. #define AUTH_LOCAL_FST    (1<<0)
  63. #define AUTH_RADIUS_FST (1<<1)
  64. #define AUTH_LOCAL_SND  (1<<2)
  65. #define AUTH_RADIUS_SND (1<<3)
  66.  
  67. typedef struct server {
  68.     int max;
  69.     char *name[SERVER_MAX];
  70.     unsigned short port[SERVER_MAX];    
  71. } SERVER;
  72.  
  73. typedef struct pw_auth_hdr
  74. {
  75.     u_char          code;
  76.     u_char          id;
  77.     u_short         length;
  78.     u_char          vector[AUTH_VECTOR_LEN];
  79.     u_char          data[2];
  80. } AUTH_HDR;
  81.  
  82. #define AUTH_HDR_LEN            20
  83. #define MAX_SECRET_LENGTH        (3 * 16) /* MUST be multiple of 16 */
  84. #define CHAP_VALUE_LENGTH        16
  85.  
  86. #define PW_AUTH_UDP_PORT        1645
  87. #define PW_ACCT_UDP_PORT        1646
  88.  
  89. #define PW_TYPE_STRING            0
  90. #define PW_TYPE_INTEGER            1
  91. #define PW_TYPE_IPADDR            2
  92. #define PW_TYPE_DATE            3
  93.  
  94. /* standard RADIUS codes */
  95.  
  96. #define    PW_ACCESS_REQUEST        1
  97. #define    PW_ACCESS_ACCEPT        2
  98. #define    PW_ACCESS_REJECT        3
  99. #define    PW_ACCOUNTING_REQUEST        4
  100. #define    PW_ACCOUNTING_RESPONSE        5
  101. #define    PW_ACCOUNTING_STATUS        6
  102. #define    PW_PASSWORD_REQUEST        7
  103. #define    PW_PASSWORD_ACK            8
  104. #define    PW_PASSWORD_REJECT        9
  105. #define    PW_ACCOUNTING_MESSAGE        10
  106. #define    PW_ACCESS_CHALLENGE        11
  107. #define    PW_STATUS_SERVER        12
  108. #define    PW_STATUS_CLIENT        13
  109.  
  110.  
  111. /* standard RADIUS attribute-value pairs */
  112.  
  113. #define    PW_USER_NAME            1    /* string */
  114. #define    PW_USER_PASSWORD        2    /* string */
  115. #define    PW_CHAP_PASSWORD        3    /* string */
  116. #define    PW_NAS_IP_ADDRESS        4    /* ipaddr */
  117. #define    PW_NAS_PORT            5    /* integer */
  118. #define    PW_SERVICE_TYPE            6    /* integer */
  119. #define    PW_FRAMED_PROTOCOL        7    /* integer */
  120. #define    PW_FRAMED_IP_ADDRESS        8    /* ipaddr */
  121. #define    PW_FRAMED_IP_NETMASK        9    /* ipaddr */
  122. #define    PW_FRAMED_ROUTING        10    /* integer */
  123. #define    PW_FILTER_ID                11    /* string */
  124. #define    PW_FRAMED_MTU            12    /* integer */
  125. #define    PW_FRAMED_COMPRESSION        13    /* integer */
  126. #define    PW_LOGIN_IP_HOST        14    /* ipaddr */
  127. #define    PW_LOGIN_SERVICE        15    /* integer */
  128. #define    PW_LOGIN_PORT            16    /* integer */
  129. #define    PW_OLD_PASSWORD            17    /* string */ /* deprecated */
  130. #define    PW_REPLY_MESSAGE        18    /* string */
  131. #define    PW_LOGIN_CALLBACK_NUMBER    19    /* string */
  132. #define    PW_FRAMED_CALLBACK_ID        20    /* string */
  133. #define    PW_EXPIRATION            21    /* date */ /* deprecated */
  134. #define    PW_FRAMED_ROUTE            22    /* string */
  135. #define    PW_FRAMED_IPX_NETWORK        23    /* integer */
  136. #define    PW_STATE            24    /* string */
  137. #define    PW_CLASS            25    /* string */
  138. #define    PW_VENDOR_SPECIFIC        26    /* string */
  139. #define    PW_SESSION_TIMEOUT        27    /* integer */
  140. #define    PW_IDLE_TIMEOUT            28    /* integer */
  141. #define    PW_TERMINATION_ACTION        29    /* integer */
  142. #define    PW_CALLED_STATION_ID            30      /* string */
  143. #define    PW_CALLING_STATION_ID           31      /* string */
  144. #define    PW_NAS_IDENTIFIER        32    /* string */
  145. #define    PW_PROXY_STATE            33    /* string */
  146. #define    PW_LOGIN_LAT_SERVICE        34    /* string */
  147. #define    PW_LOGIN_LAT_NODE        35    /* string */
  148. #define    PW_LOGIN_LAT_GROUP        36    /* string */
  149. #define    PW_FRAMED_APPLETALK_LINK    37    /* integer */
  150. #define    PW_FRAMED_APPLETALK_NETWORK    38    /* integer */
  151. #define    PW_FRAMED_APPLETALK_ZONE    39    /* string */
  152. #define    PW_CHAP_CHALLENGE               60      /* string */
  153. #define    PW_NAS_PORT_TYPE                61      /* integer */
  154. #define    PW_PORT_LIMIT                   62      /* integer */
  155. #define PW_LOGIN_LAT_PORT               63      /* string */
  156.  
  157. /*    Accounting */
  158.  
  159. #define    PW_ACCT_STATUS_TYPE        40    /* integer */
  160. #define    PW_ACCT_DELAY_TIME        41    /* integer */
  161. #define    PW_ACCT_INPUT_OCTETS        42    /* integer */
  162. #define    PW_ACCT_OUTPUT_OCTETS        43    /* integer */
  163. #define    PW_ACCT_SESSION_ID        44    /* string */
  164. #define    PW_ACCT_AUTHENTIC        45    /* integer */
  165. #define    PW_ACCT_SESSION_TIME        46    /* integer */
  166. #define    PW_ACCT_INPUT_PACKETS        47    /* integer */
  167. #define    PW_ACCT_OUTPUT_PACKETS        48    /* integer */
  168. #define PW_ACCT_TERMINATE_CAUSE        49    /* integer */
  169. #define PW_ACCT_MULTI_SESSION_ID    50    /* string */
  170. #define PW_ACCT_LINK_COUNT        51    /* integer */
  171.  
  172. /*    Merit Experimental Extensions */
  173.  
  174. #define PW_USER_ID                      222     /* string */
  175. #define PW_USER_REALM                   223     /* string */
  176.  
  177. /*    Integer Translations */
  178.  
  179. /*    SERVICE TYPES    */
  180.  
  181. #define    PW_LOGIN            1
  182. #define    PW_FRAMED            2
  183. #define    PW_CALLBACK_LOGIN        3
  184. #define    PW_CALLBACK_FRAMED        4
  185. #define    PW_OUTBOUND            5
  186. #define    PW_ADMINISTRATIVE        6
  187. #define PW_NAS_PROMPT                   7
  188. #define PW_AUTHENTICATE_ONLY        8
  189. #define PW_CALLBACK_NAS_PROMPT          9
  190.  
  191. /*    FRAMED PROTOCOLS    */
  192.  
  193. #define    PW_PPP                1
  194. #define    PW_SLIP                2
  195. #define PW_ARA                          3
  196. #define PW_GANDALF                      4
  197. #define PW_XYLOGICS                     5
  198.  
  199. /*    FRAMED ROUTING VALUES    */
  200.  
  201. #define    PW_NONE                0
  202. #define    PW_BROADCAST            1
  203. #define    PW_LISTEN            2
  204. #define    PW_BROADCAST_LISTEN        3
  205.  
  206. /*    FRAMED COMPRESSION TYPES    */
  207.  
  208. #define    PW_VAN_JACOBSON_TCP_IP        1
  209. #define    PW_IPX_HEADER_COMPRESSION    2
  210.  
  211. /*    LOGIN SERVICES    */
  212.  
  213. #define PW_TELNET                       0
  214. #define PW_RLOGIN                       1
  215. #define PW_TCP_CLEAR                    2
  216. #define PW_PORTMASTER                   3
  217. #define PW_LAT                          4
  218. #define PW_X25_PAD                      5
  219. #define PW_X25_T3POS                    6
  220.  
  221. /*    TERMINATION ACTIONS    */
  222.  
  223. #define    PW_DEFAULT            0
  224. #define    PW_RADIUS_REQUEST        1
  225.  
  226. /*    PROHIBIT PROTOCOL  */
  227.  
  228. #define PW_DUMB        0    /* 1 and 2 are defined in FRAMED PROTOCOLS */
  229. #define PW_AUTH_ONLY    3
  230. #define PW_ALL        255
  231.  
  232. /*    ACCOUNTING STATUS TYPES    */
  233.  
  234. #define PW_STATUS_START        1
  235. #define PW_STATUS_STOP        2
  236. #define PW_STATUS_ALIVE        3
  237. #define PW_STATUS_MODEM_START    4
  238. #define PW_STATUS_MODEM_STOP    5
  239. #define PW_STATUS_CANCEL    6
  240. #define PW_ACCOUNTING_ON    7
  241. #define PW_ACCOUNTING_OFF    8
  242.  
  243. /*      ACCOUNTING TERMINATION CAUSES   */
  244.  
  245. #define PW_USER_REQUEST         1
  246. #define PW_LOST_CARRIER         2
  247. #define PW_LOST_SERVICE         3
  248. #define PW_ACCT_IDLE_TIMEOUT    4
  249. #define PW_ACCT_SESSION_TIMEOUT 5
  250. #define PW_ADMIN_RESET          6
  251. #define PW_ADMIN_REBOOT         7
  252. #define PW_PORT_ERROR           8
  253. #define PW_NAS_ERROR            9
  254. #define PW_NAS_REQUEST          10
  255. #define PW_NAS_REBOOT           11
  256. #define PW_PORT_UNNEEDED        12
  257. #define PW_PORT_PREEMPTED       13
  258. #define PW_PORT_SUSPENDED       14
  259. #define PW_SERVICE_UNAVAILABLE  15
  260. #define PW_CALLBACK             16
  261. #define PW_USER_ERROR           17
  262. #define PW_HOST_REQUEST         18
  263.  
  264. /*     NAS PORT TYPES    */
  265.  
  266. #define PW_ASYNC        0
  267. #define PW_SYNC            1
  268. #define PW_ISDN_SYNC        2
  269. #define PW_ISDN_SYNC_V120    3
  270. #define PW_ISDN_SYNC_V110    4
  271. #define PW_VIRTUAL        5
  272.  
  273. /*       AUTHENTIC TYPES */
  274. #define PW_RADIUS    1
  275. #define PW_LOCAL    2
  276. #define PW_REMOTE    3
  277.  
  278. /* Server data structures */
  279.  
  280. typedef struct dict_attr
  281. {
  282.     char              name[NAME_LENGTH + 1];    /* attribute name */
  283.     int               value;            /* attribute index */
  284.     int               type;                /* string, int, etc. */
  285.     struct dict_attr *next;
  286. } DICT_ATTR;
  287.  
  288. typedef struct dict_value
  289. {
  290.     char               attrname[NAME_LENGTH +1];
  291.     char               name[NAME_LENGTH + 1];
  292.     int                value;
  293.     struct dict_value *next;
  294. } DICT_VALUE;
  295.  
  296. typedef struct value_pair
  297. {
  298.     char               name[NAME_LENGTH + 1];
  299.     int                attribute;
  300.     int                type;
  301.     UINT4              lvalue;
  302.     char               strvalue[AUTH_STRING_LEN + 1];
  303.     struct value_pair *next;
  304. } VALUE_PAIR;
  305.  
  306. /* don't change this, as it has to be the same as in the Merit radiusd code */
  307. #define MGMT_POLL_SECRET    "Hardlyasecret"
  308.  
  309. /*     Define return codes from "SendServer" utility */
  310.  
  311. #define BADRESP_RC    -2
  312. #define ERROR_RC    -1
  313. #define OK_RC        0
  314. #define TIMEOUT_RC    1
  315.  
  316. typedef struct send_data /* Used to pass information to sendserver() function */
  317. {
  318.     u_char          code;        /* RADIUS packet code */
  319.     u_char          seq_nbr;    /* Packet sequence number */
  320.     char           *server;        /* Name/addrress of RADIUS server */
  321.     int             svc_port;    /* RADIUS protocol destination port */
  322.     int             timeout;    /* Session timeout in seconds */
  323.     int        retries;
  324.     VALUE_PAIR     *send_pairs;     /* More a/v pairs to send */
  325.     VALUE_PAIR     *receive_pairs;  /* Where to place received a/v pairs */
  326. } SEND_DATA;
  327.  
  328. #ifndef MIN
  329. #define MIN(a, b)     ((a) < (b) ? (a) : (b))
  330. #endif
  331. #ifndef MAX
  332. #define MAX(a, b)     ((a) > (b) ? (a) : (b))
  333. #endif
  334.  
  335. #ifndef PATH_MAX
  336. #define PATH_MAX    1024
  337. #endif
  338.  
  339. typedef struct env
  340. {
  341.     int maxsize, size;
  342.     char **env;
  343. } ENV;
  344.  
  345. #define ENV_SIZE    128
  346.  
  347. __BEGIN_DECLS
  348.  
  349. /*    Function prototypes    */
  350.  
  351. /*    avpair.c        */
  352.  
  353. VALUE_PAIR *rc_avpair_add __P((VALUE_PAIR **, int, void *, int));
  354. int rc_avpair_assign __P((VALUE_PAIR *, void *, int));
  355. VALUE_PAIR *rc_avpair_new __P((int, void *, int));
  356. VALUE_PAIR *rc_avpair_gen __P((AUTH_HDR *));
  357. VALUE_PAIR *rc_avpair_get __P((VALUE_PAIR *, UINT4));
  358. void rc_avpair_insert __P((VALUE_PAIR **, VALUE_PAIR *, VALUE_PAIR *));
  359. void rc_avpair_free __P((VALUE_PAIR *));
  360. int rc_avpair_parse __P((char *, VALUE_PAIR **));
  361. int rc_avpair_tostr __P((VALUE_PAIR *, char *, int, char *, int));
  362. VALUE_PAIR *rc_avpair_readin __P((FILE *));
  363.  
  364. /*    buildreq.c        */
  365.  
  366. void rc_buildreq __P((SEND_DATA *, int, char *, unsigned short, int, int));
  367. unsigned char rc_get_seqnbr __P((void));
  368. int rc_auth __P((UINT4, VALUE_PAIR *, VALUE_PAIR **, char *));
  369. int rc_auth_proxy __P((VALUE_PAIR *, VALUE_PAIR **, char *));
  370. int rc_acct __P((UINT4, VALUE_PAIR *));
  371. int rc_acct_proxy __P((VALUE_PAIR *));
  372. int rc_check __P((char *, unsigned short, char *));
  373.  
  374. /*    clientid.c        */
  375.  
  376. int rc_read_mapfile __P((char *));
  377. UINT4 rc_map2id __P((char *));
  378.  
  379. /*    config.c        */
  380.  
  381. int rc_read_config __P((char *));
  382. char *rc_conf_str __P((char *));
  383. int rc_conf_int __P((char *));
  384. SERVER *rc_conf_srv __P((char *));
  385. int rc_find_server __P((char *, UINT4 *, char *));
  386.  
  387. /*    dict.c            */
  388.  
  389. int rc_read_dictionary __P((char *));
  390. DICT_ATTR *rc_dict_getattr __P((int));
  391. DICT_ATTR *rc_dict_findattr __P((char *));
  392. DICT_VALUE *rc_dict_findval __P((char *));
  393. DICT_VALUE * rc_dict_getval __P((UINT4, char *));
  394.  
  395. /*    ip_util.c        */
  396.  
  397. UINT4 rc_get_ipaddr __P((char *));
  398. int rc_good_ipaddr __P((char *));
  399. const char *rc_ip_hostname __P((UINT4));
  400. unsigned short rc_getport __P((int));
  401. int rc_own_hostname __P((char *, int));
  402. UINT4 rc_own_ipaddress __P((void));
  403.  
  404.  
  405. /*    log.c            */
  406.  
  407. void rc_openlog __P((char *));
  408. void rc_log __P((int, const char *, ...));
  409.  
  410. /*    sendserver.c        */
  411.  
  412. int rc_send_server __P((SEND_DATA *, char *));
  413.  
  414. /*    util.c            */
  415.  
  416. void rc_str2tm __P((char *, struct tm *));
  417. char *rc_mksid __P((void));
  418. char *rc_getifname __P((char *));
  419. char *rc_getstr __P((char *, int));
  420. void rc_mdelay __P((int));
  421. char *rc_mksid __P((void));
  422.  
  423. /*    env.c            */
  424.  
  425. struct env *rc_new_env __P((int));
  426. void rc_free_env __P((struct env *));
  427. int rc_add_env __P((struct env *, char *, char *));
  428. int rc_import_env __P((struct env *, char **));
  429.  
  430. /* md5.c            */
  431.  
  432. void rc_md5_calc __P((unsigned char *, unsigned char *, unsigned int));
  433.  
  434. __END_DECLS
  435.  
  436. #endif /* RADIUSCLIENT_H */
  437.